﻿using ConfExpert.Forms.Base;
using ConfExpert.Forms.SatinAlma.YeniYapi;
using DevExpress.XtraBars;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraReports.UI;
using DevTeam;
using System;
using System.Collections.Generic;
using System.Data;

namespace ConfExpert.Forms.Depo.CekmeTesti
{
    public partial class Talepler : XForm
    {
        string tip = string.Empty;
        public Talepler(string tip)
        {
            InitializeComponent();
            this.tip = tip;
            this.Text = tip + " Testi Talep Yönetimi";
        }

        DataSet dsData = null;
        private void CekmeTesti_Load(object sender, EventArgs e)
        {
            this.Shown += CekmeTesti_Shown;
            dsData = ExecuteDataSet("GetCekmeTesti2", WhoAmI, DBNull.Value, tip);
            gvFoyLines.Init(dsData.Tables[0]);
            gvFoyLines.AddDetailGrid(gvRolls, "CekmeTestiLinesId");

            gvFoyLines.MakeColumnInvisible("InsertedOn");
            gvFoyLines.MakeColumnInvisible("ParcaCikisEmriId");
            gvRolls.MakeColumnInvisible("InsertedOn", "CekmeTestiLinesRollId");
            gvFoyLines.AddSummary();
            gvRolls.AddSummary();
            gvFoyLines.AddAutoIncrementalPK("CekmeTestiLinesId");
            gvRolls.AddAutoIncrementalPK("CekmeTestiLinesRollId");
            gvFoyLines.DataTable().TableNewRow += dt_TableNewRow;
            gvFoyLines.OptionsView.NewItemRowPosition = NewItemRowPosition.Bottom;
            gvFoyLines.SetCaptions("CekmeTestiLinesId:#", "OlusturulmaTarihi:Oluşturulma", "FoyId:Föy No.", "YikamaRecetesi:Yıkama Reçetesi", "UtuBilgisi:Ütü Bilgisi");
            gvFoyLines.MakeColumnsReadOnly("CekmeTestiLinesId", "FoyId", "OlusturanId", "OlusturulmaTarihi");
            gvRolls.MakeColumnsReadOnly("bolundu", "KaynakRollId");
            gvFoyLines.Columns["YikamaRecetesi"].ColumnEdit = PO.riYikama;
            gvFoyLines.Columns["UtuBilgisi"].ColumnEdit = PO.riUtu;

            switch (tip)
            {
                case "Yıkama": gvFoyLines.MakeColumnInvisible("UtuBilgisi"); break;
                case "Ütü": gvFoyLines.MakeColumnInvisible("YikamaRecetesi"); break;
            }

            gvRolls.OptionsView.NewItemRowPosition = NewItemRowPosition.Bottom;
            gvRolls.ClearColumnEdit("En");
            gvRolls.BestFitColumns();

            RepositoryItemHyperLinkEdit link = new RepositoryItemHyperLinkEdit();
            link.SingleClick = true;
            gvFoyLines.Columns["FoyId"].ColumnEdit = link;
            gvFoyLines.RowCellClick += gv_RowCellClick;

            GridManager gm = GridManager.GetManager(gvFoyLines);
            gm.GridMenu.AddMenu("Seçili Satırlar İçin Föy Oluştur", Foy_Click);
            gm.GridMenu.AddMenu("Sonuç Föyü Çıkar", CekmeDegerleri_Click);

            btnKaydet.ItemClick += btnKaydet_ItemClick;
            gvFoyLines.ShowingEditor += gvFoyLines_ShowingEditor;
            gvRolls.ShowingEditor += gvFoyLines_ShowingEditor;

            gvFoyLines.BestFitColumns();
            chkHepsi.CheckedChanged += chkHepsi_CheckedChanged;
        }

        void chkHepsi_CheckedChanged(object sender, ItemClickEventArgs e)
        {
            gvFoyLines.RefreshDataSource(true, "GetCekmeTesti2", (chkHepsi.Checked ? 0 : WhoAmI), DBNull.Value, tip);
            btnKaydet.Enabled = !chkHepsi.Checked;
        }

        void gvFoyLines_ShowingEditor(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (gvFoyLines.FocusedRowHandle != DevExpress.XtraGrid.GridControl.NewItemRowHandle)
            e.Cancel = gvFoyLines.GetFocusedRowCellValue("OlusturanId").ToInt() != WhoAmI;
        }

        void CekmeTesti_Shown(object sender, EventArgs e)
        {
            splitter.AutoSize(0.7);
        }

        private void CekmeDegerleri_Click(object sender, EventArgs e)
        {
            string idxs = gvFoyLines.GetSelectedValues("CekmeTestiLinesId");
            Rapor.xrCekmeDegerleri xr = new Rapor.xrCekmeDegerleri(idxs, tip);
            xr.ShowPreview();
        }

        void gv_RowCellClick(object sender, RowCellClickEventArgs e)
        {
            if (e.Column.FieldName == "FoyId")
                ShowFoy(e.CellValue.ToInt());
        }

        private void ShowFoy(int FoyId)
        {
            DataSet dsFoy = ExecuteDataSet("GetCekmeTestiFoy", FoyId);
            if (dsFoy.Tables[0].Rows.Count > 0)
                using (TaleplerFoyu foy = new TaleplerFoyu(dsFoy, tip))
                    foy.ShowPreviewDialog();
        }

        void dt_TableNewRow(object sender, DataTableNewRowEventArgs e)
        {
            e.Row["OlusturanId"] = WhoAmI;
            e.Row["OlusturulmaTarihi"] = DateTime.Now;
        }

        private void btnKaydet_ItemClick(object sender, ItemClickEventArgs e)
        {
            gvFoyLines.EndEditing();
            int focusedCekmeTestiLinesId = gvFoyLines.GetFocusedRowCellValue("CekmeTestiLinesId").ToInt();

            //TODO: sadece gerekli sütunları gönder!
            string xml1 = gvFoyLines.SerializeChanges();
            string xml2 = gvRolls.SerializeChanges();
            DataTable dt = ExecuteDataTable("CheckCekmeTesti", xml1, xml2);
            if (dt.Rows.Count > 0)
            {
                List<string> lst = new List<string>();
                foreach (DataRow r in dt.Rows)
                    lst.Add(r["Hata"].ToStr());

                ShowErrorMessage("Aşağıdaki CekmeTestiLinesId-Artikel-RollId grupları hatalı. RollId'ler düzeltilene kadar sistem kayda izin vermeyecektir!" + Environment.NewLine + Environment.NewLine + string.Join(Environment.NewLine, lst.ToArray()));
            }
            else
                gvFoyLines.UpdateAll();


            gvFoyLines.BestFitColumns();
            gvRolls.BestFitColumns();

            int rh = gvFoyLines.LocateByDisplayText(0, gvFoyLines.Columns["CekmeTestiLinesId"], focusedCekmeTestiLinesId.ToStr());
            gvFoyLines.FocusedRowHandle = rh;
            dsData.AcceptChanges();
        }

        private void Foy_Click(object sender, EventArgs e)
        {
            int[] rhs = gvFoyLines.GetSelectedRows();

            if (rhs.Length == 0)
                if (gvFoyLines.FocusedRowHandle > -1)
                    rhs = new int[] { gvFoyLines.FocusedRowHandle };
                else
                    return;

            int foyno = 0;
            int max = ExecuteScalar("GetMaxCekmeTestiFoyId").ToInt();

            bool found = false;
            foreach (int rh in rhs)
            {
                if (gvFoyLines.GetRowCellValue(rh, "FoyId").ToInt() == 0)
                {
                    gvFoyLines.SetRowCellValue(rh, "FoyId", max + 1);
                    found = true;
                }
            }

            if (found)
            {
                btnKaydet.PerformClick();
                ShowFoy(foyno);
            }
            else
                ShowMessage("Seçtiğiniz satırlarda föy oluşturulmamış olan yok.");

        }

        private void btnFoy_ItemClick(object sender, ItemClickEventArgs e)
        {
            int foyNo = bbiFoyNo.EditValue.ToInt();
            if (foyNo > 0)
                gvFoyLines.RefreshDataSource(true, "GetCekmeTesti2", DBNull.Value, foyNo, tip);
            else
                ShowErrorMessage("Lütfen görmek istediğiniz föyün numarasını yazın.");
        }

        private void bbiBul_ItemClick(object sender, ItemClickEventArgs e)
        {
            int CikisEmriNo = beiCikisEmriNo.EditValue.ToInt();
            if (CikisEmriNo > 0)
            {
                int Anahtar = ExecuteScalar("GetCikisEmriNoValid", WhoAmI, CikisEmriNo).ToInt();
                switch (Anahtar)
                {
                    case 2:
                        gvFoyLines.RefreshDataSource("GetCekmeTestiWithCikisEmriNo", WhoAmI, CikisEmriNo, Anahtar);
                        break;
                    case 1:
                        gvFoyLines.RefreshDataSource("GetCekmeTestiWithCikisEmriNo", WhoAmI, CikisEmriNo, Anahtar);
                        break;
                    case 0:
                        ShowErrorMessage("Size Ait Olmayan Bir Çıkış Emri Numarası Kullandınız.");
                        break;
                    default: break;
                }

            }
            else
                ShowErrorMessage("Lütfen Geçerli Bir Çıkış Emri Numarası Girin.");
        }
    }
}
